<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
<script>
  // function Parent() {
  //   // 预期：调用Parent,this ==> child
  //   console.log(this) // 全局对象
  //   this.name = '黑马'
  //
  //   this.age = '黑马'
  //   this.a = 'a'
  //   this.b = 'b'
  //   this.c = 'c'
  // }
  //
  // // 继承
  // // 1、实例属性
  // // 2、原型方法
  //
  // Parent.prototype.sing = function () {
  //   console.log('你好')
  // }
  //
  // function Child() {
  //   // this ==> child
  //   // bind ,
  //   // call
  //   // apply
  //   Parent.call(this)
  // }
  //
  // setTimeout(function () {
  //
  // })
  //
  // // Child()
  //
  // // object.create（传入对象）在干啥？
  // // 创建一个空对象
  // // 创建出来的空对象的__proto__属性指向传入的对象
  //
  // // const res = Object.create({})
  // // console.log(res)
  //
  // Child.prototype = Object.create(Parent.prototype) // {}.__proto__ => Parent.Prototype
  // Child.prototype.getAge = function () {
  // }
  // Child.prototype.constructor = Child
  // // Child.prototype = new Parent()
  //
  // const child = new Child()
  //
  // console.log(child)
  // console.log(child.sing)

  //   继承？
  //  1、继承实例属性 Parent.call(子类this， '参数1', '参数2', ...)
  //  2、继承原型方法 Child.prototype = Object.create(Parent.prototype)
  //  3、子类原型的constructor指向自己

  //  数组方法
  //  forEach
  //  filter
  //  map
  //  some
  //  every
  //  reduce

  //  Object.defineProperty

  // 词法作用域
  // 静态作用域


  // 作用域链：跟变量查找相关(变量的查找联调)
  // 按照函数定义的位置查找的
  // 静态
  function get() {
    let b = '234'

    function cc() {
      console.log(b) // '1'  'undefined' '234' '报错'
    }

    console.dir(cc)

    return cc
    // cc()
  }

  const cc1 = get()


  // get()

  // function get() {}

  // 浅拷贝：拷贝引用地址 前端：只拷贝一层

  const obj = {
    msg: {
      name: '234'
    },
    age: {
      test: 'test'
    }
  }
  // [] {}
  // {}
  // map
  const newObj = {
    msg: obj.msg,
    age: obj.age
  }

  {

  }

  // 只拷贝了外层数据，深层次的数据拷贝的还是一个引用地址
  // for (let) {
  //   let x = '1'
  // }
  //
  // for {
  //   var a = 'a'
  // }
</script>

</body>
</html>
